大家好啊~ 這裡是鐵匠史密斯,
既然我們已經知道了玩家的位置 fXPlayer
、 fYPlayer
以及其視野 screen
那接下來就要介紹: 玩家的視野方向 fPlayerA
,以及視野範圍 AOV
!!重要,在本程式中,我們會以 [rad] 、 而非 [degree],來表示角度單位
根據命名 fPlayerA
可知,它代表玩家的朝向,即玩家視線的方向(以 [rad]、 [degree]為單位)
老樣子,上圖~
上圖可知,我們假設玩家看的方向 fPlayerA = 0
float fPlayerA{ 0.0f };
那你一定會詢問,為什麼0 [rad] 是往下(+y 方向)看呢?
其實沒有一定的規定,但這會影響到玩家移動的方向、以及Ray Casting中光線的方向
我們先假設 fPlayerA = 0
是玩家看向地圖 +y 方向
AoV, 又稱 Angle of View ─ 玩家的視野範圍(以 [rad]、 [degree]為單位)
常常有人會把AoV(Angle of View) 以及 FoV(Field of View) 搞混,其實
FoV(Field of View, 視場) 也就是 screen
可以參考光學相關的Reference: FOV and AOV
好的,帶回來AoV,我們在程式中以 AOV
表示視野範圍,並以 [rad] 表示其單位
假設初始的AOV 為 45 [degree],也就是 𝝅 / 4 [rad],初始化為:
float fFOV{ 3.14157 / 4.0 };
畢竟𝝅是無理數...所以,對我們只能初始化大概的數值就好,所以,在地圖中,
玩家看到的視野範圍如圖:
我們進一步探討AOV,
javidx9 大神在影片中,為了確立左/右 半邊視野,令
視野中心為0 degree,
左半邊為 -AOV/2 degree
右半邊為 AOV/2 degree
直接上圖,我們以玩家Player 為翻轉,以他的正視方向來看AoV
可以看到,在玩家正視方向,左半邊視角為負,右半邊視角為正
!!! 重要: 視角的角度 ≠ 玩家方向的角度 !!! 兩者改變方向的邏輯不同
fPlayerA
玩家方向的定義AoV
玩家視野的定義AoV
左半邊/右半邊視野的 正/負 定義
明日會講解**fPlayerA
玩家方向的改變原理**,途中也會講到fPlayerA
玩家方向 以及 AOV
的正負區別
旅行還很長,再多走個幾里路,加油!!